/**
 * 物业信息管理API接口
 * 
 * @author Wu.Liang
 * @since 2025-06-29
 */

import api from '../request'
import type { ApiResponse } from '@/types'
import type { 
  PropertyInfo, 
  PropertyInfoUpdateData, 
  PropertyInfoStats,
  PropertyInfoResponse,
  PropertyInfoStatsResponse
} from '@/types/property'
import { useUserStore } from '@/store/user'

/**
 * 物业信息管理API
 */
export const propertyInfoApi = {
  /**
   * 查询物业信息
   * @param propertyCompanyId 物业公司ID，如果不传则获取当前用户的物业信息
   * @returns 物业信息
   */
  getPropertyInfo: (propertyCompanyId?: number) => {
    if (propertyCompanyId) {
      return api.get<PropertyInfoResponse>(`/api/property/info/${propertyCompanyId}`)
    } else {
      return api.get<PropertyInfoResponse>('/api/property/info')
    }
  },

  /**
   * 更新物业信息
   * @param data 物业信息更新数据
   * @returns 操作结果
   */
  updatePropertyInfo: (data: {
    // 基本信息
    companyName?: string
    propertyCompanyId?: number
    creditCode?: string
    businessLicense?: string
    legalRepresentative?: string
    establishedDate?: string
    registeredCapital?: number
    qualificationLevel?: string
    
    // 联系信息
    contactPerson?: string
    contactPhone?: string
    contactEmail?: string
    email?: string
    address?: string
    businessHours?: string
    serviceHotline?: string
    
    // 服务信息
    serviceScope?: string
    
    
    // 支付信息
    paymentAccount?: string
    paymentBank?: string
    paymentLink?: string
    wechatPayMerchantId?: string
    alipayMerchantId?: string
    
    // 图片信息
    companyLogo?: string
    paymentQrCode?: string
    
    // 描述信息
    introduction?: string
    description?: string
    remark?: string
  }) => {
    return api.put<ApiResponse<null>>('/api/property/info', data)
  },

  /**
   * 更新当前用户的物业信息
   * @param data 物业信息更新数据
   * @returns 操作结果
   */
  updateCurrentUserPropertyInfo: (data: {
    // 基本信息
    companyName?: string
    propertyCompanyId?: number
    creditCode?: string
    businessLicense?: string
    legalRepresentative?: string
    establishedDate?: string
    registeredCapital?: number
    qualificationLevel?: string
    
    // 联系信息
    contactPerson?: string
    contactPhone?: string
    contactEmail?: string
    email?: string
    address?: string
    businessHours?: string
    serviceHotline?: string
    
    // 服务信息
    serviceScope?: string
    
    // 支付信息
    paymentAccount?: string
    paymentBank?: string
    paymentLink?: string
    wechatPayMerchantId?: string
    alipayMerchantId?: string
    
    // 图片信息 - JSON字符串格式
    companyLogo?: string
    paymentQrCode?: string
    
    // 描述信息
    introduction?: string
    description?: string
    remark?: string
  }) => {
    return api.put<ApiResponse<null>>('/api/property/info', data)
  },

  /**
   * 检查物业公司关联
   * @returns 是否有关联
   */
  hasPropertyCompany: () => {
    return api.get<ApiResponse<boolean>>('/api/property/info/has-company')
  },

  /**
   * 获取物业信息统计
   * @param propertyCompanyId 物业公司ID，如果不传则获取当前用户的物业信息统计
   * @returns 统计信息
   */
  getPropertyInfoStats: (propertyCompanyId?: number) => {
    if (propertyCompanyId) {
      return api.get<PropertyInfoStatsResponse>(`/api/property/info/stats/${propertyCompanyId}`)
    } else {
      return api.get<PropertyInfoStatsResponse>('/api/property/info/stats')
    }
  },

  /**
   * 导出物业信息
   * @returns 导出文件路径
   */
  exportPropertyInfo: () => {
    return api.get<ApiResponse<string>>('/api/property/info/export')
  },

  /**
   * 清除物业信息缓存
   * @returns 操作结果
   */
  clearPropertyInfoCache: () => {
    return api.delete<ApiResponse<null>>('/api/property/info/cache')
  },

  /**
   * 获取指定物业公司的信息
   * @param propertyCompanyId 物业公司ID
   * @returns 物业信息
   */
  getPropertyInfoByCompanyId: (propertyCompanyId: number) => {
    return api.get<PropertyInfoResponse>(`/api/property/info/${propertyCompanyId}`)
  },

  /**
   * 获取用户关联的物业公司列表
   * @param userId 用户ID，如果不传则获取当前用户
   * @returns 用户物业公司列表
   */
  getUserPropertyCompanies: (userId?: number) => {
    // 如果没有传入userId，需要从store获取当前用户ID
    const userStore = useUserStore()
    const currentUserId = userId || userStore.userInfo?.id
    if (!currentUserId) {
      return Promise.reject(new Error('用户ID不能为空'))
    }
    return api.get<ApiResponse<Array<{
      id: number
      userId: number
      userName?: string
      userPhone?: string
      propertyCompanyId: number
      propertyCompanyName: string
      propertyCompanyCode?: string
      status: number
      statusText?: string
      remark?: string
      createTime: string
      updateTime: string
    }>>>(`/api/user/property-companies/user/${currentUserId}`)
  }
}

export default propertyInfoApi 